package com.lcodecore.tkrefreshlayout.header.bezierlayout; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.support.annotation.ColorInt; import android.util.AttributeSet; import android.view.View; /** * cjj */ public class RippleView extends View { private Paint mPaint; private int r; private OnRippleEndListener listener; public int getR() { return r; } public void setR(int r) { this.r = r; } public RippleView(Context context) { this(context, null, 0); } public RippleView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public RippleView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } ValueAnimator va; private void init() { mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setColor(0xffffffff); mPaint.setStyle(Paint.Style.FILL); } public void setRippleColor(@ColorInt int color) { if (mPaint != null) mPaint.setColor(color); } public void startReveal() { setVisibility(VISIBLE); if (va == null) { int bigRadius = (int) (Math.sqrt(Math.pow(getHeight(), 2) + Math.pow(getWidth(), 2))); va = ValueAnimator.ofInt(0, bigRadius / 2); va.setDuration(bigRadius); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { r = (int) animation.getAnimatedValue() * 2; invalidate(); } }); va.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { if (listener != null) { listener.onRippleEnd(); } } }); } va.start(); } public void stopAnim() { if (va != null && va.isRunning()) va.cancel(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawCircle(getWidth() / 2, getHeight() / 2, r, mPaint); } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (va != null) va.cancel(); } public void setRippleEndListener(OnRippleEndListener listener) { this.listener = listener; } public interface OnRippleEndListener { void onRippleEnd(); } }